﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace IceDog.EFCore.ContosoUniversity.Models
{
    /// <summary>
    /// 学生模型
    /// </summary>
    public class Student
    {
        public int ID { get; set; }
        [Required]
        [StringLength(50)]
        [RegularExpression(@"^[A-Z]+[a-zA-Z""'\s-]*$")]
        [Display(Name = "Last Name")]
        public string LastName { get; set; }
        [RegularExpression(@"^[A-Z]+[a-zA-Z""'\s-]*$")]
        [StringLength(50, ErrorMessage = "First name cannot be longer than 50 characters.")]
        [Column("FirstName")]
        [Required]
        [Display(Name = "First Name")] 
        public string FirstMidName { get; set; }
        //DisplayFormat 特性可由其本身使用。 搭配使用 DataType 特性和
        //DisplayFormat 特性通常是很好的做法。 DataType 特性按照数据
        //在屏幕上的呈现方式传达数据的语义。 DataType 特性可提供 DisplayFormat
        //中所不具有的以下优点：
        //浏览器可启用 HTML5 功能。 例如，显示日历控件、区域设置适用的货币符号、电子邮件链接、客户端输入验证等。
        //默认情况下，浏览器将根据区域设置采用正确的格式呈现数据。
        [DataType(DataType.Date)]
        //ApplyFormatInEditMode 设置指定还应对编辑 UI 应用该格式设置。 
        //某些字段不应使用 ApplyFormatInEditMode。 例如，编辑文本框中通常不应显示货币符号。
        [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
        [Display(Name = "Enrollment Date")]
        public DateTime EnrollmentDate { get; set; }
        [Display(Name = "Full Name")]
        public string FullName => LastName + " " + FirstMidName;

        public ICollection<Enrollment> Enrollments { get; set; }
    }
}